package com.hos.entity.sys;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;

/**
 * 用户信息表
 *
 * @author 陈海彬
 * @TableName sys_user
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "sys_user")
public class User implements Serializable {

    /**
     * 用户ID
     */
    @NotNull(message = "[用户ID]不能为空")
    @ApiModelProperty("用户ID")
    @TableId(type = IdType.AUTO)
    private Long userId;
    /**
     * 部门ID
     */
    @ApiModelProperty("部门ID")
    private Long deptId;
    /**
     * 用户账号
     */
    @NotBlank(message = "[用户账号]不能为空")
    @Size(max = 30, message = "编码长度不能超过30")
    @ApiModelProperty("用户账号")
    @Length(max = 30, message = "编码长度不能超过30")
    private String userName;
    /**
     * 用户类型（0超级用户为 1为系统用户）
     */
    @ApiModelProperty("用户类型（0超级用户为 1为系统用户）")
    private String userType;
    /**
     * 用户性别（0男 1女 2未知）
     */
    @ApiModelProperty("用户性别（0男 1女 2未知）")
    private String sex;
    /**
     * 年龄
     */
    @ApiModelProperty("年龄")
    private Integer age;
    /**
     * 头像
     */
    @Size(max = 255, message = "编码长度不能超过255")
    @ApiModelProperty("头像")
    @Length(max = 255, message = "编码长度不能超过255")
    private String picture;
    /**
     * 学历 sys_dict_type:sys_user_background
     */
    @ApiModelProperty("学历 sys_dict_type:sys_user_background")
    private String background;
    /**
     * 电话
     */
    @NotBlank(message = "[电话]不能为空")
    @Size(max = 11, message = "编码长度不能超过11")
    @ApiModelProperty("电话")
    @Length(max = 11, message = "编码长度不能超过11")
    private String phone;
    /**
     * 用户邮箱
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("用户邮箱")
    @Length(max = 50, message = "编码长度不能超过50")
    private String email;
    /**
     * 擅长
     */
    @Size(max = 255, message = "编码长度不能超过255")
    @ApiModelProperty("擅长")
    @Length(max = 255, message = "编码长度不能超过255")
    private String strong;
    /**
     * 荣誉
     */
    @Size(max = 255, message = "编码长度不能超过255")
    @ApiModelProperty("荣誉")
    @Length(max = 255, message = "编码长度不能超过255")
    private String honor;
    /**
     * 简介
     */
    @Size(max = -1, message = "编码长度不能超过-1")
    @ApiModelProperty("简介")
    @Length(max = -1, message = "编码长度不能超过-1")
    private String introduction;
    /**
     * 医生级别sys_dict_type:sys_user_level
     */
    @ApiModelProperty("医生级别sys_dict_type:sys_user_level")
    private String userRank;
    /**
     * 密码
     */
    @Size(max = 100, message = "编码长度不能超过100")
    @ApiModelProperty("密码")
    @Length(max = 100, message = "编码长度不能超过100")
    private String password;
    /**
     * 最后一次登录时间
     */
    @ApiModelProperty("最后一次登录时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date lastLoginTime;
    /**
     * 最后登陆IP
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("最后登陆IP")
    @Length(max = 50, message = "编码长度不能超过50")
    private String lastLoginIp;
    /**
     * 帐号状态（0正常 1停用）
     */
    @ApiModelProperty("帐号状态（0正常 1停用）")
    private String status;
    /**
     *
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("")
    @Length(max = 50, message = "编码长度不能超过50")
    private String unionId;
    /**
     * 用户授权登录openid 扩展第三方登陆使用
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("用户授权登录openid 扩展第三方登陆使用")
    @Length(max = 50, message = "编码长度不能超过50")
    private String openId;
    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    /**
     * 创建者
     */
    @Size(max = 64, message = "编码长度不能超过64")
    @ApiModelProperty("创建者")
    @Length(max = 64, message = "编码长度不能超过64")
    private String createBy;
    /**
     * 更新者
     */
    @Size(max = 64, message = "编码长度不能超过64")
    @ApiModelProperty("更新者")
    @Length(max = 64, message = "编码长度不能超过64")
    private String updateBy;
    /**
     * 盐
     */
    @Size(max = 35, message = "编码长度不能超过35")
    @ApiModelProperty("盐")
    @Length(max = 35, message = "编码长度不能超过35")
    private String salt;
    /**
     * 删除标志（0正常 1删除）
     */
    @ApiModelProperty("删除标志（0正常 1删除）")
    @TableLogic(value = "0", delval = "1")
    private String delFlag;
    /**
     * 是否需要参与排班0需要,1 不需要
     */
    @ApiModelProperty("是否需要参与排班0需要,1 不需要")
    private String schedulingFlag;

    @ApiModelProperty("token")
    @TableField(exist = false)
    private String token;
}
